# -*- coding: utf-8 -*-

import logging
import shutil
import os

import formencode.validators

from pylons.decorators import decorator

from fileupload.lib.base import *
from fileupload.model.forms import FileUploadForm

log = logging.getLogger(__name__)

class BaseUploadController(BaseController):
    
    validate_schema = None 
    _permanent_store = None 
    
    def _get_permanenr_store(self):
        return self._permanent_store
    
    permanent_store = property(_get_permanenr_store,
        doc="Путь до места хранения файлов на файловой системе.")

    def _store_path(self, file_):
        """ Формирование пути до файла,
        размещаемого на сервере.
        """

        file_path = os.path.join(self.permanent_store,
            file_['filename'])
        
        return file_path

    def _write_file(self, file_):
        """ Метод реализует процесс записи
        файла. Делает вызов _store_path чтобы
        узнать место, кудв следует сохранять файл.
        """

        file_path = self._store_path(file_)

        permanent_file = open(file_path, 'w')
        permanent_file.write(file_['content'])
        permanent_file.close()
    
    def _handle_form_error(self, error):
        """ Обработка ошибки обработчиа формы.
        """
        log.error(error)

    def _handle_form(self):
        """ Обрбаботка формы запроса.
        """
        
        try:
            self.files = self.validate_schema.to_python(request.params)
        except formencode.validators.Invalid, error:
            self._handle_form_error(error)

    def upload(self):
        self._handle_form()
        map(self._write_file, self.files['files'])

class UploadController(BaseUploadController):
    _permanent_store = '/home/masted/ftp/incoming/upload/'
    validate_schema = FileUploadForm
 
